package com.deliccio.dao.impl;

import java.util.List;

import javax.persistence.EntityManagerFactory;

import org.hibernate.engine.PersistenceContext;
import org.springframework.stereotype.Repository;
import org.springframework.transaction.annotation.Transactional;

import com.deliccio.connect.DAO;
import com.deliccio.dao.PedidosDAO;
import com.deliccio.entitys.Cliente;
import com.deliccio.entitys.Pedidos;
import com.deliccio.entitys.Sucursales;

@Repository("PedidosDAO")
@Transactional
public class PedidosDAOImpl extends DAO<Pedidos> implements PedidosDAO{

	@Override
	public List<Pedidos> obeternerPedidosPorClienteProceso(Cliente cliente,Integer pROCESO,Integer eN_ESPERA){	
		sqlQuery=" select new Pedidos(p.id,p.precioTotal,p.fechareserva,p.fechaatendida,p.estadosgenerales,p.horainicio) from Pedidos p " +	
				" where p.id>0 and p.estadosgenerales.id in ( :proceso , :enespera ) and p.cliente.id=:cliente ";
		q=em.createQuery(sqlQuery);
		q.setParameter("proceso",pROCESO);
		q.setParameter("enespera",eN_ESPERA);
		q.setParameter("cliente",cliente.getId());		
		return q.getResultList();
	}

	@Override
	public List<Pedidos> obtenerPeddiosPorSucursal(Sucursales sucursales, Integer proceso, Integer enespera, Integer cancelado){		
		sqlQuery=" select new Pedidos(p.id,p.precioTotal,p.fechareserva,p.fechaatendida,p.estadosgenerales,p.horainicio)" +
				"  from Pedidos p " +	
				" where p.id>0 and p.estadosgenerales.id in ( :proceso , :enespera , :cancelado ) and p.sucursales.id=:sucursal ";
		q=em.createQuery(sqlQuery);
		q.setParameter("proceso",proceso);
		q.setParameter("enespera",enespera);
		q.setParameter("cancelado",cancelado);
		q.setParameter("sucursal",sucursales.getId());	
		q.setMaxResults(100);
		return q.getResultList();
	}
	
	@Override
	public Pedidos obtenerPedidosPorMesa(int idMesa){
		sqlQuery=" select distinct new Pedidos(p.id,p.precioTotal,p.fechareserva,p.fechaatendida,p.estadosgenerales,p.horainicio)" +
				"  from Pedidos p , PedidoMesa pm   " +	
				" where p.id>0  and p.id = pm.pedidoMesaPK.idpedido and pm.pedidoMesaPK.idmesa=:idMesa group by 1";
		q=em.createQuery(sqlQuery);
		q.setParameter("idMesa",idMesa);
		q.setMaxResults(1);
		return (Pedidos) q.getSingleResult();
	}
	
}
